import { Sdk_Platform, Login_Status } from "./constants"
cc.Class({
    extends: cc.Component,

    properties: {
        manager_prefab: cc.Prefab,  // 常驻预制体
        login_bg_node: cc.Node,      // 整体背景图片
        logo_node: cc.Node,          // Logo节点
        bundle_list: [],             // 包加载状态list
        res_list: [],                // 资源加载状态list
        // count: 0,                   // 加载帧计数
        // interval: 15,               // 加载帧间隔

        loading_node: cc.Node,      // 加载节点
        restart_login_node: cc.Node,// 重新更新节点
        loading_label: cc.Label,    // 加载LoadingLabel
        loading_bar_sprite: cc.Sprite,//  

        // version_label:cc.Label, 
        // version_widget:cc.Widget,

        // tip_node:cc.Node,
        // tip_label:cc.Label,
        // tip_time:-1,
    },
    // 加载顺序 
    // 加载Bundle包 -》 播放主题曲 -》 初始化SDK-》 加载用户数据 -》 加载数据 -》 加载资源包 -》 启动游戏
    start() {
        // 屏幕自适应
        this.adjust_screen()
        // 初始化音乐
        // 初始化管理内容
        let currentScene = cc.director.getScene()
        let manager_node = currentScene.getChildByName("manager")
        // 检测 管理节点是否存在
        if (!window.gg || !window.gg.node || !manager_node) {
            let managerPrefab = cc.instantiate(this.manager_prefab)
            currentScene.addChild(managerPrefab)
            let managerScript = managerPrefab.getComponent("manager")
            managerScript.start_app()
            gg.eventManager.on("login", this.listenClient, this)
        }
        he.voice.checkSetting()
        let user = he.local.getJson('user')
        if (user) {
            if (!user.guideList) {
                common.bundle_list.push('comic')
            }
        } else {
            common.bundle_list.push('comic')
        }
        // sdk 检测
        this.bundle_list = []
        console.log(common.bundle_list, 'bundle')
        for (let i = 0; i < common.bundle_list.length; i++) {
            he.load.loadBundle(common.bundle_list[i], this.checkBundle.bind(this))
        }
        // 若是本地则直接进入
    },
    checkBundle(error, res) {
        if (res && res.name) {
            this.bundle_list.push(res.name)
            if (common.bundle_list.length == this.bundle_list.length) {
                he.sdkInit()
            }
        }
    },
    // 按宽窄来进行自适应
    adjust_screen() {
        let screen_size = cc.view.getFrameSize().width / cc.view.getFrameSize().height
        let design_size = cc.Canvas.instance.designResolution.width / cc.Canvas.instance.designResolution.height

        // 比例调整
        window.zoom_scale = screen_size / design_size
        let f = screen_size >= design_size
        cc.Canvas.instance.fitHeight = f
        cc.Canvas.instance.fitWidth = !f
        if (window.zoom_scale > 1.3) {
            window.zoom_scale = 1
        }
        // Logo和背景缩放
        this.login_bg_node.scale = window.zoom_scale
        this.logo_node.scale = window.zoom_scale
    },
    // 加载本地资源
    loadResources() {
        this.loading_node.active = true
        if (common.UI_Init.length) {
            he.load.loadResList(common.UI_Init, this.updateLoadbar.bind(this))
        } else {
            this.toMain()
        }
    },
    // 更新进度条
    updateLoadbar(err, res) {
        if (res.name) {
            if (this.res_list.indexOf(res.name) < 0) {
                this.res_list.push(res.name)
            }
        } else {
            return
        }

        this.loading_bar_sprite.fillRange = this.res_list.length / common.UI_Init.length
        // 标签显示
        if (this.version_label) {
            this.version_label.node.active = true
            this.version_label.string = `当前版本：` + common.version
            this.version_widget.updateAlignment()
            this.tip_time = 0
            // this.tip_node.active = true
            this.changeTip()
            this.loading_label.string = he.load.loadStatus() * 100 + `%`
            // 开启版本和tip
        }
        if (this.res_list.length == common.UI_Init.length) {
            this.loginGame()
        }
    },
    // 成功载入主场景
    toMain() {
        this.check_load = true
        cc.director.loadScene("Main");
    },
    // 随机展现提示信息
    changeTip() {
        let tips = he.db.getTable("Tips")
        let random_res = parseInt(tips.length * Math.random())
        let tip = tips[random_res]
        this.tip_label.string = tip.des
    },
    // 登录游戏操作
    loginGame() {
        this.listenClient(Login_Status.LOGIN)
        he.user.login()
        this.restart_login_node.active = false
    },
    // 登录监听
    listenClient(code, param, arg) {
        if (code) {
            switch (code) {
                case Login_Status.LOGIN:
                    this.loading_label.string = `登陆中`
                    break
                case Login_Status.LOAD_RES:
                    this.loading_label.string = `加载资源中`
                    this.loadResources()
                    break
                case Login_Status.LOGIN_FAIL:
                    this.loading_label.string = `登录失败，请重新登录`
                    this.restart_login_node.active = true
                    break
                case Login_Status.LOGIN_SUCCESS:
                    this.loading_label.string = `登录成功`
                    he.switchInit()
                    break
                case Login_Status.TO_MAIN:
                    this.toMain()
                    break
                case Login_Status.CHECK_UPDATE:
                    this.loading_label.string = `资源更新中`
                    break
                case Login_Status.UPDATE_FAIL:
                    this.loading_label.string = `更新失败，重启应用`
                    break
            }
        }
    },
    onDestroy() {
        gg.eventManager.off("login", this.listenClient, this)
    },
    // 检测加载进度
    update(dt) {
        // 游戏提示内容
        // if(this.tip_time >= 0){
        //   this.tip_time += dt
        //   if(this.tip_time > common.TIP_TIME){
        //       this.tip_time = 0
        //       this.changeTip()
        //   }
        // }
        // 多次检测 避免其他问题无法登录
        // if (this.check_load) {
        // this.count += dt
        // if(this.count > 3.5){
        //     this.count = 0
        //     cc.director.loadScene("Main");
        // }
        //     if (this.count > this.interval) {
        //         this.count = 0
        //         if (he.load.loadOver()) {
        //             this.loginGame()
        //         }
        //     }
        // }
    },
});
